package compute;

import java.util.ArrayList;

import data.DataBloc;
import data.Key;

public class DesEcb extends Mode {

	/**
	 * constructeur par défaut
	 */
	public DesEcb() {
		blocEncrypter = new DES();
	}

	/**
	 * constructeur avec une clef spécifié
	 */
	public DesEcb(Key k) {
		blocEncrypter = new DES(k);
	}

	@Override
	public byte[] encrypt(String plainText) {
		ArrayList<DataBloc> plainTextDataBloc = DataBloc.toDataBloc(plainText);
		ArrayList<DataBloc> cypherTextDataBloc = new ArrayList<DataBloc>();
		for (DataBloc dataBloc : plainTextDataBloc) {
			cypherTextDataBloc.add(blocEncrypter.encrypt(dataBloc));
		}

		return DataBloc.toBytes(cypherTextDataBloc);
	}

	@Override
	public String decrypt(byte[] cyphetText) {
		ArrayList<DataBloc> cypherTextDataBloc = DataBloc
				.toDataBlocs(cyphetText);
		ArrayList<DataBloc> plainTextDataBloc = new ArrayList<DataBloc>();
		for (DataBloc dataBloc : cypherTextDataBloc) {
			plainTextDataBloc.add(blocEncrypter.decrypt(dataBloc));
		}
		return DataBloc.toString(plainTextDataBloc);
	}

	public Key getKey() {
		return ((DES) blocEncrypter).getKey();
	}

	public void setKey(Key k) {
		((DES) blocEncrypter).setKey(k);
	}

	public static void main(String[] args) {
		DesEcb desecb = new DesEcb();
		String originalText = "Il était une fois dans l'ouest.";
		byte[] cypherText = desecb.encrypt(originalText);
		String plainText = desecb.decrypt(cypherText);
		System.out.println(originalText);
		System.out.println(cypherText.toString());
		System.out.println(plainText);
	}
}
